﻿using System.ComponentModel;

namespace HlElock.Api.Models
{
    /// <summary>
    /// 表示一个房间的信息，用于添加到 PMS 系统。
    /// </summary>
    public class RoomInfo : INotifyPropertyChanged
    {
        private string _flType = string.Empty;
        private string _tjDate = string.Empty;
        private string _extNum = string.Empty;
        private string _operId = string.Empty;
        private string _floor = string.Empty;
        private string _build = string.Empty;
        private string _window = string.Empty;
        private string _prjCode = string.Empty;
        private string _roomId = string.Empty;
        private string _face = string.Empty;
        private string _preId = string.Empty;
        private string _sufId = string.Empty;

        /// <summary>
        /// 获取或设置房间类型（例如 "大床房"）。
        /// 对应 API 中的 'fltype' 字段。
        /// </summary>
        public string FlType
        {
            get => _flType;
            set { _flType = value; OnPropertyChanged(nameof(FlType)); }
        }

        /// <summary>
        /// 获取或设置房间添加/编辑日期。
        /// 预期格式通常是 'yyyy-MM-dd'。
        /// 对应 API 中的 'tjdate' 字段。
        /// </summary>
        public string TjDate
        {
            get => _tjDate;
            set { _tjDate = value; OnPropertyChanged(nameof(TjDate)); }
        }

        /// <summary>
        /// 获取或设置房间的分机。
        /// 对应 API 中的 'extnum' 字段。
        /// </summary>
        public string ExtNum
        {
            get => _extNum;
            set { _extNum = value; OnPropertyChanged(nameof(ExtNum)); }
        }

        /// <summary>
        /// 获取或设置操作员 ID。
        /// 对应 API 中的 'operid' 字段。
        /// </summary>
        public string OperId
        {
            get => _operId;
            set { _operId = value; OnPropertyChanged(nameof(OperId)); }
        }

        /// <summary>
        /// 获取或设置房间所在的楼层（例如 "A"）。
        /// 对应 API 中的 'floor' 字段。
        /// </summary>
        public string Floor
        {
            get => _floor;
            set { _floor = value; OnPropertyChanged(nameof(Floor)); }
        }

        /// <summary>
        /// 获取或设置房间所在的楼栋标识。
        /// 对应 API 中的 'build' 字段。
        /// </summary>
        public string Build
        {
            get => _build;
            set { _build = value; OnPropertyChanged(nameof(Build)); }
        }

        /// <summary>
        /// 获取或设置房间是否有窗户。
        /// 通常 "1" 表示有，"0" 表示无。
        /// 对应 API 中的 'window' 字段。
        /// </summary>
        public string Window
        {
            get => _window;
            set { _window = value; OnPropertyChanged(nameof(Window)); }
        }

        /// <summary>
        /// 获取或设置与房间关联的项目代码。
        /// 对应 API 中的 'prjcode' 字段。
        /// </summary>
        public string PrjCode
        {
            get => _prjCode;
            set { _prjCode = value; OnPropertyChanged(nameof(PrjCode)); }
        }

        /// <summary>
        /// 获取或设置房间的唯一标识符。
        /// 对应 API 中的 'roomid' 字段。
        /// </summary>
        public string RoomId
        {
            get => _roomId;
            set { _roomId = value; OnPropertyChanged(nameof(RoomId)); }
        }

        /// <summary>
        /// 获取或设置房间的朝向（例如 "朝东"）。
        /// 对应 API 中的 'face' 字段。
        /// </summary>
        public string Face
        {
            get => _face;
            set { _face = value; OnPropertyChanged(nameof(Face)); }
        }

        /// <summary>
        /// 获取或设置用于生成房间号的前缀 ID。
        /// 对应 API 中的 'preid' 字段。
        /// </summary>
        public string PreId
        {
            get => _preId;
            set { _preId = value; OnPropertyChanged(nameof(PreId)); }
        }

        /// <summary>
        /// 获取或设置用于生成房间号的后缀 ID。
        /// 对应 API 中的 'sufid' 字段。
        /// </summary>
        public string SufId
        {
            get => _sufId;
            set { _sufId = value; OnPropertyChanged(nameof(SufId)); }
        }

        /// <summary>
        /// 获取用于在列表中显示的房间信息文本。
        /// </summary>
        public string DisplayText => $"房间号: {RoomId}, 类型: {FlType}, 楼层: {Floor}, 楼栋: {Build}";

        /// <summary>
        /// 初始化 <see cref="RoomInfo"/> 类的新实例。
        /// </summary>
        public RoomInfo() { }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}